Physical unclonable functions (PUF) afford an auspicious mechanism that can be used in many safety-relevant, data-protection-related and digital-rights-related applications. A physical unclonable function can be regarded as a function that is embodied in or by means of a physical structure and that, although relatively simple to evaluate, can be predicted only with very great difficulty. In addition, an individual PUF medium is typically easy to produce but practically impossible to duplicate with respect to the PUF, even using exactly the same production method.
Another name for the physical unclonable function is a physical hash function. The idea of physical unclonable functions or PUFs is to digitize physical properties of an object and thus to obtain a bit sequence (number) that is associated with the object. In this case, it is desirable for the bit sequences of two different physical objects to be uncorrelated. A simple example for purposes of illustration is a sheet of paper. When viewed under a microscope, it is possible to see a special fine structure of wood chips or cellulose portions. The structure is measured using a suitable algorithm and the result is presented as a bit sequence. This bit sequence is the PUF. Another sheet of paper generally produces a bit sequence that is uncorrelated with the bit sequence of the first sheet of paper.
The process for producing a bit sequence (the actual PUF thereof) from the properties of the physical object is called PUF generation. It is a typical aim for the PUF generation to be efficient.
A desirable property of a PUF generation mechanism is that the same physical object produces the same bit sequence each time in the course of fresh PUF generation (that is to say in the course of a freshly made PUF request). However, this is typically not the case. Repeated PUF generation for the same physical object provides bit sequences that, although very similar to one another, are generally not identical to one another. This discrepancy is typically compensated for by using methods from coding theory (error correction). In this case, the error correction is typically carried out by a piece of special hardware or by a processor that executes an appropriate software program. It is desirable for the error correction to be made as efficient as possible in terms of hardware complexity and/or computation complexity.